package device

import "sync"

type Pool struct {
	pool *sync.Pool
}

func NewPool(size int) *Pool {
	return &Pool{
		pool: &sync.Pool{
			New: func() interface{} {
				buf := make([]byte, size)
				return &buf // 返回切片的指针
			},
		},
	}
}

func (p *Pool) Get() *[]byte {
	return p.pool.Get().(*[]byte)
}

func (p *Pool) Put(b *[]byte) {
	//隐藏暗坑，如果Get的切片被不小心修改了大小，那么Put放回后，下次Get的时候，会返回一个错误的大小的切片
	p.pool.Put(b)
}

func (p *Pool) Reset(b *[]byte) {
	*b = (*b)[:0]
}
